/**
 * @author Gene
 * @age 永远18岁的美少年
 * @Email yangjianyun@58.com
 * @date 2021-12-09 22:53:21
 * @Description 注意正则表达式的 懒惰性 和 贪婪性
 * 每个正则表达式都有一个 lastIndex 属性， 用于记录上一次匹配结束的位置
 */

// 同样的正则表达式 不添加 修饰符
/** 
 * 解释: 由于不添加修饰符的时候, 正则表达式在匹配的时候, 每次都是只匹配第一个, 其索引不自增向后匹配.
 *  所以相当于每次  test 的时候,只是 test验证了第一位字符. 所以一直是 . ,所以一直为 true
 */
let str = "./23"
let reg = /[^\d]/
console.log(reg.test(str)); // true
console.log(reg.test(str)); // true
console.log(reg.test(str)); // true
console.log(reg.test(str)); // true

console.log("--------- 华丽分割线 --------- ");

// 同样的正则表达式 添加 修饰符
/**
 * 解释:  当添加了修饰符g之后,全局匹配, 
 *  正则表达式第一次匹配 ., 不是数字 true
 *  然后所以向后移动一位, 第二次匹配/, 不是数字. true
 *  第三次匹配 2, 是数字, false
 *  当匹配成功后, 正则表达式的 lastIndex 属性回到开始位置重新匹配. 所以又为 true
 */
let str1 = "./23"
let reg1 = /[^\d]/g

console.log(reg1.lastIndex);
console.log(reg1.test(str1), "--", reg1.lastIndex); // true
console.log(reg1.test(str1), "--", reg1.lastIndex); // true
console.log(reg1.test(str1), "--", reg1.lastIndex); // false
console.log("========= 分割线 ===========");

console.log(reg1.lastIndex);
console.log(reg1.test(str1), "--", reg1.lastIndex); // true
console.log(reg1.test(str1), "--", reg1.lastIndex); // true
console.log(reg1.test(str1), "--", reg1.lastIndex); // false

console.log("========= 分割线 ===========");

console.log(reg1.lastIndex);
console.log(reg1.test(str1), "--", reg1.lastIndex); // true
console.log(reg1.test(str1), "--", reg1.lastIndex); // true
console.log(reg1.test(str1), "--", reg1.lastIndex); // false